package com.bmps.springcloud.insuredmicroservice.repository.underwrite.coresystem;


import com.bmps.springcloud.insuredmicroservice.model.underwrite.RiskModel;
import org.apache.ibatis.annotations.Param;
import org.apache.ibatis.annotations.Select;
import org.springframework.stereotype.Repository;

import java.math.BigDecimal;
import java.util.List;
import java.util.Map;

/**
 * @author lyw
 * @date 2019/07/24
 */
@Repository
public interface InsuredCoreRepository {
    /**
     * 获取累计重疾险保额 不包含HCT026
     *
     * @param appntNo   投保人客户号
     * @param insuredNo 被保人客户号
     * @return double
     */
    double getRiskAmountHct026(@Param(value = "appntNo") String appntNo, @Param(value = "insuredNo") String insuredNo);

    /**
     * 获取累计重疾险保额
     *
     * @param appntNo   投保人客户号
     * @param insuredNo 被保人客户号
     * @return double
     */
    double getSeriousDiseaseInsuranceCount(@Param(value = "appntNo") String appntNo, @Param(value = "insuredNo") String insuredNo);

    /**
     * 获取单次给付历史单
     *
     * @param appntNo   投保人客户号
     * @param insuredNo 被保人客户号
     * @return double
     */
    double getHistorySinglePay(@Param(value = "appntNo") String appntNo, @Param(value = "insuredNo") String insuredNo);


    /**
     * 获取HCT026累计重疾险保额
     *
     * @param insuredNo 被保人客户号
     * @return double
     */
    double getHCT026InsuranceCount(@Param(value = "insuredNo") String insuredNo, @Param(value = "prtNo") String prtNo);


    /**
     * 统计百万安康医疗保险
     *
     * @param prtNo     投保单号
     * @param insuredNo 被保人客户号
     * @return List<RiskModel>
     */
    List<RiskModel> getMillionHealthInsuranceCount(@Param(value = "prtNo") String prtNo, @Param(value = "insuredNo") String insuredNo);

    /**
     * 统计AAT078和HMT055历史购买份数
     *
     * @param riskcode  险种
     * @param prtNo     投保单号
     * @param insuredNo 被保人客户号
     * @return List<RiskModel>
     */

    List<Map<String, Object>> getHistoryMult(@Param(value = "riskCode") String riskcode, @Param(value = "prtNo") String prtNo, @Param(value = "insuredNo") String insuredNo);

    /**
     * 统计兴顺一份
     *
     * @param prtNo     投保单号
     * @param insuredNo 被保人客户号
     * @return List<RiskModel>
     */
    List<RiskModel> getInsuranceCountLimOne(@Param(value = "riskCode") String riskcode, @Param(value = "prtNo") String prtNo, @Param(value = "insuredNo") String insuredNo);


    /**
     * 查询历史单累积住院险保额
     *
     * @param prtNo     投保单号
     * @param insuredNo 被保人客户号
     * @return double
     */
    double getHistoryHospInsuAmnt(@Param(value = "prtNo") String prtNo, @Param(value = "insuredNo") String insuredNo);

    /**
     * 查询历史单累积附加交通意外安驾宝保额
     *
     * @param prtNo     投保单号
     * @param insuredNo 被保人客户号
     * @return double
     */
    double getHistoryTrafficAccidentInsuAmnt(@Param(value = "prtNo") String prtNo, @Param(value = "insuredNo") String insuredNo);

    /**
     * 查询历史累积意外险保额
     *
     * @param prtNo      当前单投保书号
     * @param customerNo 客户号
     * @return BigDecimal
     */
    BigDecimal getHistoryAccidentInsuranceAmount(@Param(value = "prtNo") String prtNo, @Param(value = "customerNo") String customerNo);

    /**
     * 查询历史金保鸿利同类产品保费
     *
     * @param insuredNo 被保人客户号
     * @return 保费
     */
    BigDecimal getHistoricalJbhlPrem(@Param(value = "insuredNo") String insuredNo);

    /**
     * 查询指定产品的历史累计保费
     *
     * @param insuredNo 客户号
     * @param riskCode  险种号
     * @return 累计保费
     */
    BigDecimal getHistoricalSumPrem(@Param(value = "insuredNo") String insuredNo, @Param("riskCode") String riskCode);

    /**
     * 查询指定产品的历史累计保额
     *
     * @param insuredNo 客户号
     * @param riskCode  险种号
     * @return 累计保额
     */
    BigDecimal getHistoricalSumAmnt(@Param(value = "insuredNo") String insuredNo, @Param("riskCode") String riskCode);

    /**
     * 是否存在重疾理赔记录
     *
     * @param insuredNo 客户号
     * @return count(1)
     */
    int hasHistoricalMajorDiseases(@Param(value = "insuredNo") String insuredNo);

    /**
     * 是否存在重疾理赔记录
     *
     * @param idNo   证件号
     * @param idType 证件类型
     * @return count(1)
     */
    int historicalMajorDiseases(@Param(value = "idNo") String idNo, @Param("idType") String idType);

    /**
     * 校验是否是白名单客户
     *  核保时匹配姓名和证件号，如匹配一致，则可在该客户超额累计保费额度内投保
     *
     * @param idNo       证件号
     * @param name       姓名
     * @param agencyCode 机构
     * @return 超额累计保费额度
     */
    String getWhiteVerify(@Param("idNo") String idNo, @Param("name") String name, @Param("agencyCode") String agencyCode);

    /**
     * 查询险种的起售保费和递增基数
     *
     * @param riskCode 险种
     * @return key-min key-base
     */
    @Select("select code \"riskCode\",codename \"min\",codealias \"base\" from lis.ldcode where codetype = 'riskqishoue' and code =#{riskCode, jdbcType = VARCHAR}")
    List<Map<String, String>> getStartingPremium(@Param("riskCode") String riskCode);

    /**
     * 查询既往健康告知
     *
     * @param customerNo 客户号
     * @return 1-存在
     */
    String getHistoricalHealthLetter(@Param("customerNo") String customerNo);

    /**
     * 查询客户类型
     * @param customerNo 客户号
     * @return 2-私行客户 3-特殊客户 1/空-普通客户
     */
    @Select("SELECT CUSTYPE FROM LIS.LDPERSON WHERE CUSTOMERNO = #{customerNo,jdbcType=VARCHAR}")
    String getCustomerType(@Param("customerNo") String customerNo);
}
